home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 2010 April
/
PCWorld0410.iso
/
pluginy Firefox
/
1191
/
1191.xpi
/
chrome
/
reminderfox.jar
/
content
/
reminderfox
/
mail
/
mail.js
< prev
next >
Wrap
Text File
|
2009-11-17
|
63KB
|
1,782 lines
/**
* mail.js
<br>
<br> @since
2008-08-04 Open Msg with msgID also with FX (non-mail apps)
<br> 2008-04-14 tagging - add/delete 'ical-*' tags for messages containing
* iCal data
<br> 2008-01-19 add TB-priority handling
<br> 2006-11-11 mod for TB1.5/label and TB2.0/tag
<p>
<br> @see
<br> MessageID-Finder for Mozilla 'messageidfinder-2.0.0.xpi' by markushossner_AT_gmx_DOT_de and
<br> 'reminderfox-0.9.6.xpi' by Daniel Lee, Tom Mutdosch
*/
var rmFx_currentSummary = null;
var rmFx_ReferenceID = "@" + "reminderfox"
var rmFx_FCC ="";
var rmFx_cmdID = null;
var rmFx_cmdString = "";
/**
* Work with rmFx_cmdLineHandler to support starting 'messenger' (TB/SM/PB)
* with start option:
*
<br> @call 'messenger'.exe -reminderFox {remoteID} -msgString {details for op}
<br>
<br> @call 'messenger'.exe -reminderFox UID:refID -msgString {file path}
<br> @call 'messenger'.exe -reminderFox COMPOSE:subject -msgString {compose parameters}
<br> @call 'messenger'.exe -reminderFox msgID:finalMessageId -msgString {subject info}
*/
function rmFx_startupwMsgId() {
//------------------------------------------------------------------------------
var startMsg = window.arguments[0].split("|.|");
rmFx_cmdID = startMsg[0];
rmFx_cmdString = startMsg[1];
//gWTEST Darwin ---------<<< ---------------
var logString = (" startupwMsgId 'remote start': "
+ "\n rmFx_cmdID: " + rmFx_cmdID
+ "\n rmFx_cmdString: " + rmFx_cmdString);
var rmFx_consoleService = Components.classes["@mozilla.org/consoleservice;1"]
.getService(Components.interfaces.nsIConsoleService);
rmFx_consoleService.logStringMessage("reminderFox: " + logString);
// ------------>>> ----------------
var cDate = new Date();
var msgLog = " ** Remote access ** " + rmFx_cmdID + " at: " + cDate;
try {
rmFxUtil.dump2Console(msgLog);
rmFxMsg.whichMessenger();
} catch (ex) {
var loader = Components.classes["@mozilla.org/moz/jssubscript-loader;1"]
.getService(Components.interfaces.mozIJSSubScriptLoader);
loader.loadSubScript("chrome://reminderfox/content/utils/rmFxUtils.js");
rmFxUtil.dump2Console(msgLog);
rmFxMsg.whichMessenger();
}
// -reminderFox UID:refID -msgString mailFile.path
if (rmFx_cmdID.indexOf('UID:') > -1) {
document.title = "Remote send message"; // reminderFox_getBundle().getString("rf.mail.remote.sendmsg");
document.getElementById('rmFx_msg1').setAttribute("value", rmFx_cmdID);
document.getElementById('rmFx_msg2').setAttribute("value", "");
setTimeout( rmFxMsg.sendwUIDgo, 1000 );
// -reminderFox COMPOSE:subject -msgString {compose parameters}
} else if (rmFx_cmdID.indexOf('COMPOSE:') > -1) {
document.title = "Remote compose message"; // reminderFox_getBundle().getString("rf.mail.remote.composemsg");
var msgString = unescape(rmFx_cmdString).split(";\n;");
var subject = msgString[0].substring(8);
document.getElementById('rmFx_msg1').setAttribute("value", "Subject: " + subject);
document.getElementById('rmFx_msg2').setAttribute("value", "");
setTimeout( rmFxMsg.composeMSGgo, 1000 );
// -reminderFox msgID:finalMessageId -msgString {subject info}
} else if (rmFx_cmdID.indexOf('msgID:') > -1) {
document.title = "Remote open message"; // reminderFox_getBundle().getString("rf.mail.remote.openmsg");
document.getElementById('rmFx_msg1').setAttribute("value", unescape(rmFx_cmdString));
document.getElementById('rmFx_msg2').setAttribute("value", rmFx_cmdID);
setTimeout( rmFx_retryMsgIdDelayed, 1000 );
} else {
alert ("reminderFox call error!")
return;
}
}
/**
* find message with MsgID ////////////////////////////
*
*/
function rmFx_retryMsgIdDelayed() {
//'UID:'
//var reminderID = rmFx_cmdID.substring(4);
//'msgID:'
var msgHdr = reminderFox_MessageIdFinder(rmFx_cmdID.substring(6));
if (msgHdr) {
window.close();
}
else { // 'reminderFox_MessageIdFinder' with TB startup will fail because
// folder structure not build already
// if it fails -->> dislog for 'retry'
document.getElementById('msgIDnotFound').setAttribute("hidden", "false");
document.getElementById('retryMsgId').setAttribute("disabled", "false");
sizeToContent();
window.focus();
}
}
function rmFx_retryMsgId() {
if (rmFx_cmdID.indexOf('UID:') > -1) {
rmFxMsg.sendwUIDgo();
window.close();
} else {
var msgHdr = reminderFox_MessageIdFinder(rmFx_cmdID);
if (msgHdr) {
window.close();
}
}
}
function reminderFox_changeMessageLabel(addTag) {
reminderFox_OpenMessageByMessageID(gDBView.hdrForFirstSelectedMessage.messageId /*messageId*/
,false /*msgOpen*/, addTag, true /*opTag*/)
}
function rmFxMsgHdrDate (dateStr) {
// PRTime is in microseconds, Javascript time is in milliseconds
// so divide by 1000 when converting
var time = new Date();
time.setTime(dateStr / 1000);
var timeString = reminderFox_mail_getTimeString( time );
var dateVariableString;
try {
dateVariableString = reminderFox_getUnicodePref(REMINDER_FOX_PREF + "." + REMINDER_FOX_LIST_DATE_LABEL);
} catch(e) {
}
var remFoxDate =reminderFox_getDateVariable( null, time, dateVariableString ) + " " + timeString;
return remFoxDate;
}
/**
* GetSelectedMessages for different TB/SM/PB versions
*
*/
function rmFx_GetSelectedMessages() {
rmFxMsg.whichMessenger();
if ((gRmFx_Messenger == "TB3") || (gRmFx_Messenger == "SM2")) {
var mailWindow = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService()
.QueryInterface(Components.interfaces.nsIWindowMediator)
.getMostRecentWindow("mail:3pane");
if (mailWindow) {
return mailWindow.gFolderDisplay.selectedMessageUris;
}
} else { // valid for all other versions
return GetSelectedMessages();
}
}
/**
<br> * Add email reminder for current selected message
*
*/
function reminderFox_thunderBirdAddEmailReminder() {
try {
document.getElementById('threadPaneContext').hidePopup();
} catch (e) {}
try {
document.getElementById('messagePaneContext').hidePopup();
} catch (e) {}
// with TB3 this is not supported !!
// var msgSelected = GetSelectedMessages();
var msgSelected = rmFx_GetSelectedMessages();
// ("works for all selected messages");
if (msgSelected.length > 1) {
window.GetThreadTree().view.selection.clearSelection();
}
for (var nHdr = 0; nHdr < msgSelected.length; nHdr++) {
var i = msgSelected[nHdr].indexOf("#");
var nextHeader = msgSelected[nHdr].substring(i +1);
var msgDBView = {};
msgDBView = window.gDBView;
msgDBView.selectMsgByKey(nextHeader);
var msgHdr = gDBView.hdrForFirstSelectedMessage;
// subject
var remFoxSummary = msgHdr.mime2DecodedSubject;
// from
var remFoxFrom = msgHdr.mime2DecodedAuthor;
// recipients
var remFoxTo = msgHdr.mime2DecodedRecipients;
var remFoxPrio =msgHdr.priority;
// add text from hightlighted mail-text
var remFoxDetails = null;
var focusedWindow = document.commandDispatcher.focusedWindow;
var selectedText = focusedWindow.getSelection();
if (selectedText != null && selectedText != "") {
remFoxDetails = "\n\n" + reminderFox_getBundle().getString("rf.add.mail.message.details") +
":\n" + selectedText.toString();
}
// messageID
var messageId = msgHdr.messageId;
// strip out quotes as the extractHeader method returns some message-id's with extraneous quotes
// like: "000c01c6941b$6ddb3c30$7be040"@foo.com
messageId = messageId.replace(new RegExp(/\"/g),"");
var remFoxMessageID = "<" + messageId + ">";
// date
var remFoxDate = rmFxMsgHdrDate (msgHdr.date);
var newDate = new Date();
newDate.setDate( newDate.getDate() + 1 ); // default to using tomorrow's date for reminder
var reminderId =reminderFox_generateUniqueReminderId( newDate );
var mailIdentifierString = reminderFox_getBundle().getString("rf.add.mail.message.mail.identifier");
var newReminderToBeAdded = new ReminderFoxEvent( reminderId, newDate, mailIdentifierString + " " + remFoxSummary );
newReminderToBeAdded.messageID = remFoxMessageID;
// add default message header info to the Notes section
newReminderToBeAdded.notes =
reminderFox_getBundle().getString("rf.add.mail.message.sender") + ": " + remFoxFrom + "\n" +
reminderFox_getBundle().getString("rf.add.mail.message.recipients") + ": " + remFoxTo + "\n" +
reminderFox_getBundle().getString("rf.add.mail.message.date") + ": " + remFoxDate + "\n" +
reminderFox_getBundle().getString("rf.add.mail.message.subject") + ": " + remFoxSummary;
if ( remFoxDetails != null ) {
newReminderToBeAdded.notes = newReminderToBeAdded.notes + remFoxDetails;
}
// PRIORITY definition for RmFx and TB
// const REMINDER_PRIORITY_NORMAL = null; // default
// const REMINDER_PRIORITY_IMPORTANT = 1;
// TB header.priority: 6= very high; 5=high; 1=normal; 3=low; 2=very low
if ( msgHdr.priority >= 5 ) { // for TB 'very high' and 'high'
newReminderToBeAdded.priority = 1; // set RmFx 'Important'
}
var added = reminderFox_addReminderHeadlessly( newReminderToBeAdded );
if (added) {
rmFx_msgTAGing("Reminderfox", true, "#993399");
} else {
// only if more remaining reminders!!
if ((msgSelected.length - nHdr - 1) > 0) {
// if the last msg was deleted, ask to terminate all remaining or continue
var title = reminderFox_getBundle().getString("rf.add.addreminder.title");
var msg = reminderFox_getBundle().getString("rf.add.addreminder.instruction2")
+ "\n\n" + reminderFox_getBundle().getString("rf.add.addreminder.instruction3") + " ┬╗ "
+ (msgSelected.length - nHdr - 1)
+ " « " + reminderFox_getBundle().getString("rf.add.addreminder.instruction4");
var key0 = reminderFox_getBundle().getString("rf.button.ok");
var key1 = "No, terminate."; // reminderFox_getBundle().getString("rf.add.addreminder.cancel");
if (rmFxUtil.ConfirmEx(title, msg, key0, key1) == 1 ) { // cancel pressed
nHdr = msgSelected.length +1;
}
}
}
}
}
/**
* displayMail
*
<br> retrieve and display this reminder's associated email in Thunderbird
*/
function reminderFox_displayMailbyMsgID(recentReminder) {
reminderFox_openByMessageID(recentReminder);
}
function reminderFox_doShowMail() {
var currentReminder = getReminderForSelectedItem( );
if ( currentReminder.messageID != null ) {
reminderFox_openByMessageID(currentReminder);
}
}
function reminderFox_doShowMailTodo() {
var currentTodo = getTodoForSelectedItem( );
if ( currentTodo.messageID != null ) {
reminderFox_openByMessageID(currentTodo);
}
}
function reminderFox_doShowMailShortcut() {
if ( isReminderTabSelected() ) {
reminderFox_doShowMail();
}
else {
reminderFox_doShowMailTodo();
}
}
function reminderFox_openByMessageID(currentReminder){
var finalMessageId = reminderFox_finalMessageId(currentReminder.messageID);
rmFx_currentSummary = currentReminder.summary;
// if using Firefox, this starts (Thunderbird) Messenger App ...
// using a specific 'commandLine' Handler
if(!("@mozilla.org/messenger;1" in Components.classes)) {
var mailApp = rmFx_MessengerApp();
if ((mailApp == null) || (mailApp == "")) {
rmFxUtil.PromptAlert("Messenger not found!"); // reminderFox_getBundle().getString("rf.schedule. $$$string "));
return;
}
var args = new Array();
args [0] = "-reminderFox";
args [1] = "msgID:" + finalMessageId;
args [2] = "-msgString";
args [3] = escape(rmFx_currentSummary); // currentReminder.summary;
try {
go4Process.init(mailApp);
} catch (ex) {}
go4Process.run(false, args, args.length);
return; // FX schedules TB with msgID:messageID -msgString rmFx_currentSummary
}
if (finalMessageId !="" ) {
var msgHdr = reminderFox_MessageIdFinder(finalMessageId);
if (!msgHdr) {
var strMsgIdNotFound = reminderFox_getBundle().getString("rf.add.mail.messageIdNotFound.message") +
"\n" + rmFx_currentSummary +
"\n(Message-ID: " + finalMessageId +")";
rmFxUtil.PromptAlert(strMsgIdNotFound);
window.setCursor("auto");
}
}
}
function reminderFox_finalMessageId(messageId){
var midleft = (messageId.toLowerCase()).search("<");
var finalMessageId;
if (midleft == -1)
finalMessageId = "";
else {
var midRight = (messageId.substring(midleft)).search(">");
finalMessageId = messageId.substring(midleft + 1, midRight );
}
return finalMessageId;
}
/**
* Clear the 'Reminder' tag from a message
*
* @note
* this function only works in messenger/ThunderBird
*
* @param messageId
*/
function reminderFox_clearLabelByMessageID(messageId){
/* ----------
if (!rmFx_isMessenger()) {
var shell = Components.classes["@mozilla.org/browser/shell-service;1"]
.getService(Components.interfaces.nsIShellService);
if (shell)
shell.openApplication(Components.interfaces.nsIShellService.APPLICATION_MAIL);
return;
}
--------- */
var midleft = (messageId.toLowerCase()).search("<");
var finalMessageId;
if (midleft == -1)
finalMessageId = "";
else {
var midRight = (messageId.substring(midleft)).search(">");
finalMessageId = messageId.substring(midleft + 1, midRight );
}
if (finalMessageId !="" ) reminderFox_OpenMessageByMessageID( finalMessageId,
false /*msgOpen*/, 0 /*labelTag*/, false /*opTag*/);
}
/**
* MessageID features
* based on: MessageID-Finder for Mozilla by
*
* Markus Hossner - markushossner@gmx.de
*/
const reminderFox_pmpB = 0; //Boolean
const reminderFox_pmpN = 1; //Integer
const reminderFox_pmpS = 2; //Char
var reminderFox_prefRead = false;
var reminderFox_accountURIs = new Array();
var reminderFox_msgWindow;
function reminderFox_MessageIdFinder(strmessageid) {
strmessageid = reminderFox_ExtractMessageID(strmessageid);
var msgHdr = reminderFox_OpenMessageByMessageID(strmessageid,true);
return msgHdr;
}
function reminderFox_getMsgWindow() {
if ( reminderFox_msgWindow == null ) {
reminderFox_msgWindow = Components.classes["@mozilla.org/messenger/msgwindow;1"].
createInstance(Components.interfaces.nsIMsgWindow);
}
return reminderFox_msgWindow;
}
function reminderFox_ExtractMessageID(strmessageid) {
var midParts = strmessageid.replace(/^<|>$/g, "")
.split(":");
switch (midParts.length) {
case 1:
strmessageid = strmessageid;
break;
case 2:
if (midParts[0] == "news" || midParts[0] == "nntp") {
strmessageid = midParts[1].replace(/^\/\/.*?\// ,"");
} else if (midParts[0] == "mailto") {
strmessageid = midParts[1];
}
break;
case 3:
strmessageid = midParts[2].replace(/^.+?\// ,"");
break;
default:
strmessageid = "";
break;
}
return strmessageid;
}
/**
* Message with matching 'messageid' will be processed with tag 'labelTag'
* based on option 'msgOpen'.
* If 'msgOpen' true the message will be opened.
*
<p> * Message is labeled/tagged with optional parameter 'labelTag'
<ul> * TB1.5
<br> * labelTag = 0 noLabel =1 ... =5 see Label Options with Pull-Down Menue
<br> * opTag = not used
</ul>*
<ul> * TB2.x / TB3.x / SM2 / PB
<br> * labelTag = string eg:ReminderFox
<br> * opTag = true: add Tag; false: remove Tag
</ul>*
* @since 2009-04 :
* messages in Template and Draft folders are not opened, but
* the folder is selected
*
* @since 2009-07
* Postbox support .. needs special handling for open folder/message
*
* @note
* TB3/SM2 and PB need to select message row in folder
*
* @param messageId
* @param msgOpen - true: opens in new window
* @param labelTag -
* @param opTag - true: adds, false: deletes the tag
*/
function reminderFox_OpenMessageByMessageID(messageId, msgOpen, labelTag, opTag) {
rmFxMsg.whichMessenger();
reminderFox_AddNewsServers();
window.setCursor("wait");
var msgHdr = reminderFox_SearchMessageLocally(messageId);
window.setCursor("auto");
if (msgHdr) {
var folder = msgHdr.folder;
var folderUri = folder.URI;
var messageUri = folder.getUriForMsg(msgHdr);
// rmFx_MsgOpenNewWindowForFolder (folderUri, messageId);
var windowManager = Components.classes['@mozilla.org/appshell/window-mediator;1']
.getService(Components.interfaces.nsIWindowMediator);
var winId = windowManager.getMostRecentWindow("mail:3pane");
if (gRmFx_Messenger == "TB3") { //TB3.0b3 ... Shredder/3.0b3pre
winId.focus();
winId.document.getElementById('tabmail').openTab("folder",
{folder: msgHdr.folder, msgHdr:msgHdr, messagePaneVisible:true } );
}
if (gRmFx_Messenger == "PB") { // PB
winId.focus();
winId.MsgOpenNewTabForFolder(folderUri, msgHdr.messageKey /*key*/, false /*aBackground*/)
}
if (gRmFx_Messenger == "SM2") {
var aTabShowFolderPane = 1 << 0;
var aTabShowMessagePane = 1 << 1;
var aTabShowThreadPane = 1 << 2;
var aTabModeFolder = aTabShowMessagePane;
if (!winId) {
winId = window.openDialog("chrome://messenger/content/", "",
"all,dialog=no");
winId = windowManager.getMostRecentWindow("mail:3pane");
}
winId.focus();
winId.document.getElementById('tabmail').openTab("3pane",
aTabModeFolder, folderUri, msgHdr);
}
// select message in the mail index
if ((gRmFx_Messenger == "TB2")) { //TB2
// --- if folderUri has '/Template' or '/Drafts' it will not open the message
var xShow = ((folderUri.indexOf("/Templates") == -1) && (folderUri.indexOf("/Drafts") == -1)) ;
// open the message in a new window
if ((msgOpen) && (xShow)){
var folder = reminderFox_GetMsgFolderFromUri(folderUri);
var messageUri = folder.getUriForMsg(msgHdr);
window.openDialog("chrome://messenger/content/messageWindow.xul", "_blank",
"all,chrome,dialog=no,status,toolbar", messageUri, folderUri, null);
}
try {
var tree = {};
var msgDB = {};
var length = {};
var wintype = {};
var msgDBView = {};
var indicesArray = {};
reminderFox_msgWindow = reminderFox_getMsgWindow();
if (document.firstChild.id == "messengerWindow") {
wintype = window.document.firstChild.getAttribute("windowtype");
reminderFox_msgWindow.SetDOMWindow(window);
folder = reminderFox_GetMsgFolderFromUri(folderUri);
msgDB = folder.getMsgDatabase(reminderFox_msgWindow);
msgDB.MarkHdrRead(msgHdr, false, null);
reminderFox_msgWindow.SelectFolder(folderUri);
msgDBView = window.gDBView;
if (wintype != "mail:messageWindow") tree = window.GetThreadTree();
} else {
wintype = window.opener.document.firstChild.getAttribute("windowtype");
reminderFox_msgWindow.SetDOMWindow(window.opener);
folder = reminderFox_GetMsgFolderFromUri(folderUri);
msgDB = folder.getMsgDatabase(reminderFox_msgWindow);
msgDB.MarkHdrRead(msgHdr, false, null);
reminderFox_msgWindow.SelectFolder(folderUri);
msgDBView = window.opener.gDBView;
if (wintype != "mail:messageWindow") tree = window.opener.GetThreadTree();
}
if (wintype != "mail:messageWindow") tree.view.selection.clearSelection();
msgDBView.selectMsgByKey(msgHdr.messageKey);
msgDBView.loadMessageByMsgKey(msgHdr.messageKey);
msgDB.MarkHdrRead(msgHdr, true, null);
msgDBView.getIndicesForSelection(indicesArray,length);
if (wintype != "mail:messageWindow") tree.treeBoxObject
.ensureRowIsVisible(indicesArray.value[0]);
} catch( e ) { }
}
}
if ((gRmFx_Messenger == "SM2") && (msgHdr == null)) {
var windowManager = Components.classes['@mozilla.org/appshell/window-mediator;1']
.getService(Components.interfaces.nsIWindowMediator);
window.openDialog("chrome://messenger/content/", "",
"all,dialog=no");
windowManager.getMostRecentWindow("mail:3pane");
// winId.focus();
// winId.document.getElementById('tabmail').openTab("3pane",
// aTabModeFolder, folderUri, msgHdr);
}
// extract the tag keys from the msgHdr
if (msgHdr != null && labelTag != null ) {
rmFx_msgTAGing("Reminderfox", opTag, "#993399" );
// delete all iCal-xxxx tags eg: PUBLISH, REQUEST, REPLY, CANCEL, ICS
var msgKeyArray = msgHdr.getStringProperty("keywords").split(" ");
if ((opTag == false) && (msgKeyArray.length > 0)) {
for (var n= 0; n< msgKeyArray.length; n++ ) {
if (msgKeyArray[n].indexOf("ical") == 0) {
try {
ToggleMessageTag(msgKeyArray[n], false /*tagOp*/, "", false) //4th param for PB
} catch (ex) {}
}
}
}
}
window.setCursor("auto");
return msgHdr;
}
/**
* Open a new window with the folder and open message
*
* @param uriToOpen - folder uri
* @param msgID - messageID
*/
function rmFx_MsgOpenNewWindowForFolder(uriToOpen, msgID) {
if (uriToOpen)
window.openDialog("chrome://messenger/content/", "_blank",
"chrome,all,dialog=no", uriToOpen, msgID);
}
/**
* Search for messageid in local folders
*/
function reminderFox_SearchMessageLocally(messageId) {
var msgHdr = null;
var folder = null;
for(var x = 0; x < reminderFox_accountURIs.length && !msgHdr; x++) {
folder = reminderFox_GetMsgFolderFromUri(reminderFox_accountURIs[x]).rootFolder;
msgHdr = reminderFox_SearchInSubFolder(folder, messageId);
}
return msgHdr;
}
/**
* Searchs in subfolder
*/
function reminderFox_SearchInSubFolder(sFolder, messageId) {
if ((gRmFx_Messenger == "TB3") || (gRmFx_Messenger == "SM2")) {
// http://mxr.mozilla.org/comm-central/source/mailnews/base/resources/content/folderWidgets.xml#496
// var msgFolder = folder.QueryInterface(Components.interfaces.nsIMsgFolder);
var subfolder = null;
var msgHdr = null;
var msgDB = null;
var currentFolderURI = "";
var done = false;
if (sFolder.hasSubFolders) {
var subfolders = sFolder.subFolders;
while (subfolders.hasMoreElements()) {
var subfolder = subfolders.getNext().QueryInterface(Components.interfaces.nsIMsgFolder);
// if (currentFolderURI.substring(1,7) != "news://") {
msgHdr = reminderFox_SearchInSubFolder(subfolder, messageId);
// }
if (!msgHdr) {
try {
var msgDB = subfolder.msgDatabase;
} catch (ex) {}
if ( msgDB != null ) msgHdr = msgDB.getMsgHdrForMessageID(messageId);
}
if (msgHdr) return msgHdr;
try {
subfolders.next();
} catch(e) {
done = true;
}
} //while
} //if (sFolder.hasSubFolders)
return null;
} else {
if (sFolder.hasSubFolders) {
var subfolders = sFolder.GetSubFolders();
var subfolder = null;
var msgHdr = null;
var msgDB = null;
var currentFolderURI = "";
var done = false;
while(!done) {
currentFolderURI = subfolders.currentItem()
.QueryInterface(Components.interfaces.nsIRDFResource).Value;
subfolder = reminderFox_GetMsgFolderFromUri(currentFolderURI);
if (currentFolderURI.substring(1,7) != "news://") {
msgHdr = reminderFox_SearchInSubFolder(subfolder, messageId);
}
if (!msgHdr) {
try {
reminderFox_msgWindow = reminderFox_getMsgWindow();
msgDB = subfolder.getMsgDatabase(reminderFox_msgWindow);
} catch (ex) {
// subfolder.updateFolder(reminderFox_msgWindow); // TM: this call was causing a hang in some instances
// try {
// // msgDB = subfolder.getMsgDatabase(reminderFox_msgWindow);
// } catch (ex) {
// }
}
if ( msgDB != null ) {
msgHdr = msgDB.getMsgHdrForMessageID(messageId);
}
}
if (msgHdr) return msgHdr;
try {
subfolders.next();
} catch(e) {
done = true;
}
}
} // TB2. if (sFolder.hasSubFolders)
return null;
// }
}
}
/**
* Searchs all availible newsserver
*/
function reminderFox_AddNewsServers() {
if (reminderFox_prefRead == false) {
var accounts = reminderFox_pmpReadPref("mail.accountmanager.accounts",reminderFox_pmpS);
if (accounts) {
var accountsArray = accounts.split(",");
for (var x = 0; x < accountsArray.length; x++) {
reminderFox_AddNewsServerMenuItem(accountsArray[x]);
}
reminderFox_accountURIs.sort(reminderFox_sortAccountUris);
}
reminderFox_prefRead = true;
}
}
/**
* Sortfunction for reminderFox_accountURIs Array Local Folder to the rear
*
* @param a and b
* @return 1: ; -1:
*/
function reminderFox_sortAccountUris(a, b) {
if (a.search(/Local%20Folders/) != -1) {
return 1;
} else if (b.search(/Local%20Folders/) != -1) {
return -1;
} else if (a < b) {
return -1;
} else if (a > b) {
return 1;
} else {
return 0;
}
}
/**
* Adds newsserver to the context menu
*
*/
function reminderFox_AddNewsServerMenuItem(account) {
var server = reminderFox_pmpReadPref("mail.account." + account + ".server",reminderFox_pmpS);
var servertyp = reminderFox_pmpReadPref("mail.server." + server + ".type",reminderFox_pmpS);
var hostname = reminderFox_pmpReadPref("mail.server." + server + ".hostname",reminderFox_pmpS);
var username = reminderFox_pmpReadPref("mail.server." + server + ".userName",reminderFox_pmpS);
var accountURI = "";
if (servertyp == "nntp") {
var servername = reminderFox_pmpReadPref("mail.server." + server + ".name",reminderFox_pmpS);
var serverport = reminderFox_pmpReadPref("mail.server." + server + ".port", reminderFox_pmpN);
// var newsservermenuitem;
if (servername == null) servername = hostname;
if (serverport == null) serverport = 119;
// newsservermenuitem = document.createElement("menuitem");
// newsservermenuitem.setAttribute("label", servername);
// newsservermenuitem.setAttribute("value",server);
// newsservermenuitem.setAttribute("oncommand","reminderFox_MessageIdFinder('" +
// hostname + "', '" + String(serverport) + "','');");
accountURI = "news://" + escape(hostname);
} else if (servertyp == "imap") {
accountURI = "imap://" + escape(username) + "@" + escape(hostname);
} else {
accountURI = "mailbox://" + escape(username) + "@" + escape(hostname);
}
if (hostname != null) reminderFox_accountURIs.push(accountURI);
}
/**
* Reads the value of pmpName out of the mozilla preferences
*
* @param pmpName
* @param pmpType Bool,Integer or Char
*
* @return pmpValue
*/
function reminderFox_pmpReadPref(pmpName, pmpType) {
var nsIPrefBranch = Components.interfaces.nsIPrefBranch;
var pref = Components.classes["@mozilla.org/preferences-service;1"]
.getService(nsIPrefBranch);
var pmpValue = null;
if (pref.prefHasUserValue(pmpName)) {
switch (pmpType) {
case reminderFox_pmpB:
pmpValue = pref.getBoolPref(pmpName);
break;
case reminderFox_pmpN:
pmpValue = pref.getIntPref(pmpName);
break;
case reminderFox_pmpS:
pmpValue = pref.getCharPref(pmpName);
break;
default:
break;
}
}
return pmpValue;
}
/**
* Get msgfolder from Uri
*
* @param uri
* @return null or msgfolder
*/
function reminderFox_GetMsgFolderFromUri(uri) {
var msgfolder = null;
try {
var RDF = Components.classes["@mozilla.org/rdf/rdf-service;1"]
.getService(Components.interfaces.nsIRDFService);
var resource = RDF.GetResource(uri);
if (resource instanceof Components.interfaces.nsIMsgFolder &&
(resource.parent || resource.isServer))
msgfolder = resource;
} catch (ex) {}
return msgfolder;
}
/**
* write the messageId to the associated reminder
*
* @param srcUri - folder address
* @param offset - pointer to the begin of the msg
*/
function rmFx_checkMsgAndUpdateReminder (srcUri, offset) {
var msgUri = reminderFox_GetMsgFolderFromUri(srcUri).baseMessageURI + "#" + offset;
var messenger = Components.classes["@mozilla.org/messenger;1"].createInstance()
.QueryInterface(Components.interfaces.nsIMessenger);
var referencedReminders = rmFxGetRmRef(messenger.messageServiceFromURI(msgUri)
.messageURIToMsgHdr(msgUri));
// the 'referencedReminders' comes back with 'messageID' set !!
var msg = "";
if (referencedReminders.length > 0) {
msg = ("Referenced Reminders: " + referencedReminders.length + "\r\n"
+ referencedReminders[0].summary + "\r\n"
+ "msgId: " + referencedReminders[0].messageID
+ " msgRef: " + referencedReminders[0].id + "\r\n"
+ msgUri + "\r\n");
// now update the ".id" Reminder with the ".messageID"
var activeReminders = reminderFox_getReminderEvents();
for ( var i = 0; i < activeReminders.length; i++ ) {
if (activeReminders[i].id == referencedReminders[0].id ) {
reminderFox_logMessageLevel ("found: " + activeReminders[i].summary
+ "\r\n pos: " + i, REMINDER_FOX_LOG_LEVEL_FINE);
reminderFox_removeElement(activeReminders, i);
reminderFox_insertIntoArray(activeReminders, referencedReminders[0], i);
reminderFox_writeOutRemindersAndTodos(false); // isExport
}
}
}
return msg;
}
////////////////// end of 'MessageID' //////////////////////////////////////////
// --- rmFx_folderListener ----------------------------------------------- ---
/**
* folder listener used with SEND++
*/
var rmFx_FolderListener = {
OnItemEvent: function(folder, event) {
//logMsg ("rmFx_Folder Listener " + event.toString());
},
OnItemAdded: function(parentItem, item) {
// logMsg ("Folder Listener OnItemAdded:" + parentItem.Value + " " + item.messageKey);
},
OnItemIntPropertyChanged: function(item, property, oldValue, newValue) {
var msg = "gwTEST: FolderListener: OnItemIntPropertyChanged: " + item.name /* //gWTEST FolderListener */
+ "\n" + property.toString() + " old:" + oldValue + " new:" + newValue;
// rmFxUtil.dump2Console (msg);
//Send Alarm with: GenericSendMessage(nsIMsgCompDeliverMode.Later);
if ((item.Value == "mailbox://nobody@Local%20Folders/Unsent%20Messages")
&& (property.toString() == "TotalMessages")) {
reminderFox_logMessageLevel ("UNSENT Folder " + property.toString() + ": " + oldValue + " " + newValue,
REMINDER_FOX_LOG_LEVEL_FINE);
}
// SEND++ with: GenericSendMessage(nsIMsgCompDeliverMode.Now);
if ((item.Value == rmFx_FCC)
&& (property.toString() == "FolderSize")) {
var msg = "SEND Folder " + property.toString() + ": " + oldValue + " " + newValue;
if ( oldValue != newValue) {
// reset the 'send folder' and Listener to process only once
rmFx_FCC = "";
rmFx_setFolderListener("remove");
var msg = rmFx_checkMsgAndUpdateReminder (item.Value, oldValue);
if (msg == "") {
msg = "SEND Folder " + property.toString() + ": " + oldValue + " " + newValue;
}
reminderFox_logMessageLevel (msg, REMINDER_FOX_LOG_LEVEL_FINE);
}
}
}
}
function rmFx_setFolderListener(mode) {
const mailSessionContractID = "@mozilla.org/messenger/services/session;1";
const nsIMsgMailSession = Components.interfaces.nsIMsgMailSession;
var mailSession = Components.classes[mailSessionContractID].getService(nsIMsgMailSession);
var nsIFolderListener = Components.interfaces.nsIFolderListener;
if (mode == "add") {
mailSession.AddFolderListener(rmFx_FolderListener, nsIFolderListener.intPropertyChanged);
}
if (mode == "remove") {
mailSession.RemoveFolderListener(rmFx_FolderListener);
}
}
/**
* ----- rmFx_copyListener -----------------------------------------------------
*/
var rmFx_copyServiceListener = {
sfileNP: null,
QueryInterface: function(iid) {
if (iid.equals(Components.interfaces.nsIMsgCopyServiceListener) ||
iid.equals(Components.interfaces.nsISupports)) {
return this;
}
throw Components.results.NS_NOINTERFACE;
return 0;
},
OnProgress: function (progress, progressMax) {
},
OnStartCopy: function () {
// alert ("START Copy from SEND ALARM")
},
OnStopCopy: function ( status ) {
// alert ("STOP Copy from SEND ALARM")
},
SetMessageKey: function (key ) {
// alert ("SetMessageKey: " + key )
}
}
////////////// rmFx_sendAlarmMail() ///////////////////////////////////////////
/**
* rmFx_sendAlarmMail()
*
<br> * EXAMPLE TEST EXAMPLE TEST EXAMPLE TEST EXAMPLE TEST EXAMPLE
<br> * called from a test entry in addreminder-dialog.xul
<br> *
<br> * This function sends a message from the "default" TB mail account.
* The passed parameters are used to build a message
* which is temporarily written as a file and using
* '.sendMessageFile' to send the message without using a 'compose' dialog.
<br> *
<br> * IMPORTANT:
* If this 'alarm' has to be send using the '-reminderFox' commad handler
* as an error / security check the file requires to contain
* 'UID:reminder.id' the refID of the reminderfox event in question
*/
function rmFx_sendAlarmMail() {
rmFxCore.statusSet ("Sending [Alarm] message!"); //gW_Statusbar
var currentReminder = getReminderForSelectedItem();
var subject = "[ALARM] " + (currentReminder.summary);
var toAddresses = "testFox <testFox@xyz.ab>";
var fromAddress = "testFox <testFox@xyz.ab>";
var body = "\n\nThis is a ReminderFox 'Alarm' test."
+ "\nSimulating an MAIL triggered from rising an alarm event.\n\n" ;
// add to 'body' some specific items for this 'event' // $$$locale rmFx_sendAlarmMail NOT USED
if (!!currentReminder.categories){
body += "*Categories* " + currentReminder.categories + "\n";
}
if (!!currentReminder.location){
body += "*Location* " + currentReminder.location + "\n";
}
if (!!currentReminder.url){
body += "*URL* " + currentReminder.url + "\n";
}
if (!!currentReminder.notes) {
body += "*Notes* ___________________________________\n"
+ ">" + currentReminder.notes.replace(new RegExp(/\n/g),"\n>");
}
var refID = currentReminder.id;
var footer = "UID:" + refID;
// create tmpFile
var tmpMsgFile = rmFxMsg.FileCreate(
subject,
fromAddress,
toAddresses,
1, /* priority higest */
body,
footer,
refID);
rmFxMsg.FileSend (
subject,
fromAddress,
toAddresses,
1, /* priority */
tmpMsgFile, refID);
rmFxCore.statusSet ("[ALARM] has been send!", ""); //gW_Statusbar
}
/**
* Utilities for Messages/Alarms /////////////////////////////////////////////
<br> * rmFxMsg ()
*
*/
function rmFxMsg () {
}
rmFxMsg.Compose = function (subject, fromAddress, toAddresses,
priority, body, footer, refID, iCalToEmailFile, methodTyp) {
// =========================================================================
if (rmFxMsg.messenger()) {
var fromId = rmFxMsg.getIdentity (fromAddress);
if (iCalToEmailFile != null) {
var msgAttachment = Components.classes["@mozilla.org/messengercompose/attachment;1"]
.createInstance(Components.interfaces.nsIMsgAttachment);
msgAttachment.temporary = true;
msgAttachment.name = iCalToEmailFile.leafName;
msgAttachment.contentType = "text/calendar;"
msgAttachment.contentTypeParam = "method=" + methodTyp + "; charset=UTF-8";
//gWTEST Darwin msgAttachment.url = "file://" + iCalToEmailFile.persistentDescriptor;
msgAttachment.url = "file://" + iCalToEmailFile.path;
}
// mail header
var composeFields = Components.classes["@mozilla.org/messengercompose/composefields;1"]
.createInstance(Components.interfaces.nsIMsgCompFields);
composeFields.useMultipartAlternative = true;
composeFields.characterSet = "UTF-8";
composeFields.from = fromId.email;
composeFields.replyTo = fromId.email;
toAddresses = (toAddresses == "null") ? "" : toAddresses;
composeFields.to = toAddresses; // ???????????
function exHtml(xString){
return xString.replace(new RegExp(/</g),"<").replace(new RegExp(/>/g),">")
}
composeFields.subject = subject;
composeFields.body = exHtml(body + footer);
composeFields.priority = priority;
if (iCalToEmailFile != null) {
composeFields.addAttachment(msgAttachment);
}
// message compose paramaters
var msgComposeParams = Components.classes["@mozilla.org/messengercompose/composeparams;1"]
.createInstance(Components.interfaces.nsIMsgComposeParams);
msgComposeParams.composeFields = composeFields;
msgComposeParams.identity = fromId;
msgComposeParams.format = Components.interfaces.nsIMsgCompFormat.Default;
msgComposeParams.type = Components.interfaces.nsIMsgCompType.New;
// open a composer window
var messengerCompose = Components.classes["@mozilla.org/messengercompose;1"]
.getService().QueryInterface(Components.interfaces.nsIMsgComposeService);
messengerCompose.OpenComposeWindowWithParams(null, msgComposeParams);
rmFxCore.statusSet ("Send message by " + fromId.identityName + " pending." , ""); //gW RmFxStatusbar
} else {
/** -- NO 'messenger' .. (like FX) ----------------------------------- **/
/* calling TB -reminderFox COMPOSE:{info about what to compose} */
//messageString definition
var msgString = "Subject:" + subject
+ ";\n;From:" + fromAddress
+ ";\n;To:" + toAddresses
+ ";\n;Body:" + body
+ ";\n;Footer:" + footer
+ ";\n;priority:" + priority
+ ";\n;refID:" + refID;
if (iCalToEmailFile != null) {
msgString += ";\n;mailFile:" + iCalToEmailFile.path;
}
msgString = escape(msgString);
var mailApp = rmFx_MessengerApp();
if ((mailApp == null) || (mailApp == "")) {
rmFxUtil.PromptAlert("Messenger not found!"); // reminderFox_getBundle().getString("rf.schedule. $$$string "));
return;
}
var args = new Array();
args [0] = "-reminderFox";
args [1] = "COMPOSE:" + subject;
args [2] = "-msgString";
args [3] = msgString; // compose items to be passed
try {
go4Process.init(mailApp);
} catch (ex) {}
go4Process.run(false, args, args.length);
return; // FX schedules TB with COMPOSE:subject -msgString msgString
}
}
var deleteSendFileOnCompletion = true; // this is the tmpFile, not the 'Send' folder copy
/**
* Send File
*
* @see
* http://mxr.mozilla.org/comm-central/source/mailnews/compose/public/nsIMsgSend.idl
* http://mxr.mozilla.org/comm-central/source/mailnews/compose/public/nsIMsgCompFields.idl
*
* @param subject the 'subject' the mail comes with
* @param fromAddress the 'FROM' address sending the msg
* @param toAddresses the 'TO' addresses to receive the msg (csv)
* @param body any message 'body' to be send
* @param tmpFile file object containing the message
*/
rmFxMsg.FileSend = function ( subject, fromAddress, toAddresses,
priority, mailFile, refID) {
// =========================================================================
if ( rmFxMsg.messenger()) { //try // 'in 'messenger' ??
// need different code for TB2 and TB3/SM2 !!!
if("@mozilla.org/filespec;1" in Components.classes) {
// this TB2 code
var mailFileURL = rmFxUtil.getIOService().newFileURI(mailFile).spec;
mailFile = Components.classes["@mozilla.org/filespec;1"]
.createInstance(Components.interfaces.nsIFileSpec);
mailFile.URLString = mailFileURL;
}
var fromId = rmFxMsg.getIdentity (fromAddress);
var composeFields = Components.classes["@mozilla.org/messengercompose/composefields;1"]
.createInstance(Components.interfaces.nsIMsgCompFields);
composeFields.characterSet = "UTF-8";
composeFields.to = toAddresses;
composeFields.from = fromId.identityName;
composeFields.replyTo = fromId.identityName;
composeFields.priority = rmFxMsg.setPriorityString (priority);
var messengerSend = Components.classes["@mozilla.org/messengercompose/send;1"]
.createInstance(Components.interfaces.nsIMsgSend);
messengerSend.sendMessageFile(
fromId, /* nsIMsgIdentity */
fromId.key, /* nsIMsgCompFields */
composeFields, /* nsIMsgCompFields */
mailFile, /* nsFileSpec */
deleteSendFileOnCompletion,
false, /* digest_p */
/* nsMsgDeliverMode */
rmFxUtil.getIOService().offline
? Components.interfaces.nsIMsgSend.nsMsgQueueForLater /* = 1 */
: Components.interfaces.nsIMsgSend.nsMsgDeliverNow, /* = 0 */
null, /* nsIMsgDBHdr msgToReplace */
null, /* nsIMsgSendListener aListener */
null, /* nsIMsgStatusFeedback aStatusFeedback */
""); /* password */
} else { // if the above fails .. in 'NON messenger'
rmFxMsg.sendwUID (refID, mailFile.path);
}
}
/**
* File Creation for message
*
* FX: encodes the whole 'content' string with .encodeUTF8
* TB: NO encodes the whole 'content'
*/
rmFxMsg.FileCreate = function (subject, fromAddress, toAddresses, priority,
body, footer,
refID, iCalString, methodTyp) {
//=====================================================================
var thisdate = new Date();
// add app info .. will be added to the 'footer'
var osInfo = rmFx_opSystemInfo();
var appInfo = Components.classes["@mozilla.org/xre/app-info;1"]
.getService(Components.interfaces.nsIXULAppInfo);
var appDetails = "\n " + appInfo.name + " " + appInfo.version
+ " (" + appInfo.platformBuildID + ") -- " + osInfo;
var content = "MIME-version: 1.0\r\n";
content += "To: " + toAddresses + "\r\n";
if ( rmFxMsg.messenger()) {
var contentS = "Subject: " + rmFxMsg.encodeMimeHeader(subject) + "\r\n";
contentS += "From: " + rmFxMsg.getIdentity (fromAddress).identityName + "\r\n";
} else {
var contentS = "Subject: " + subject + "\r\n";
contentS += "From: " + fromAddress + "\r\n";
}
content += contentS;
content += "Date :" + rmFxCore.mailDateTime(thisdate, "mailDate") + "\r\n";
content += rmFxMsg.setPriorityString(priority) + "\r\n";
content += "Content-class: urn:content-classes:reminderfox\r\n";
var newDate = new Date();
var msgId = reminderFox_generateUniqueReminderId( newDate );
if (refID != "") {
content
+= "Reference-ID: <" + refID + rmFx_ReferenceID + ">\r\n"
+ "In-Reply-To: <" + refID + rmFx_ReferenceID + ">\r\n";
+ "Message-Id: <" + msgId + rmFx_ReferenceID + ">\r\n";
//gw_messageID/In-Reply-To w send/reply invitation
}
// if 'iCalString' and 'methodTyp' send with iCal attachment
if (!!iCalString && !!methodTyp) {
content
+= ("Content-type: multipart/mixed; boundary=\"anhang_1234567890_0987654321\"\r\n"
+ "\r\n\r\n"
+ "--anhang_1234567890_0987654321\r\n"
+ "Content-type: multipart/alternative;\r\n"
+ " boundary=\"anhang_0987654321_1234567890\"\r\n"
+ "\r\n\r\n"
+ "--anhang_0987654321_1234567890\r\n"
+ "Content-type: text/plain; charset=UTF-8\r\n"
+ "Content-transfer-encoding: 8BIT\r\n"
+ "\r\n"
+ body
+ "\n-- " /* footer delimiter line !!! do not delete !
this notation will cut the following part from plain-text-reply !*/
+ "\n" + footer + appDetails
+ "\n ________________________________________________"
+ "\n http://reminderfox.mozdev.org/\n"
+ "\r\n\r\n\r\n"
+ "--anhang_0987654321_1234567890\r\n"
+ "Content-type: text/calendar; method=" + methodTyp + "; charset=UTF-8\r\n"
+ "Content-transfer-encoding: 8BIT\r\n"
+ "\r\n"
+ iCalString
+ "\r\n\r\n"
+ "--anhang_0987654321_1234567890--\r\n\r\n"
+ "--anhang_1234567890_0987654321\r\n"
+ "Content-type: application/ics; name=invite.ics\r\n"
+ "Content-transfer-encoding: 8BIT\r\n"
+ "Content-disposition: attachment; filename=invite.ics\r\n"
+ "\r\n" /* need an extra line to separate header !! */
+ iCalString
+ "\r\n\r\n"
+ "--anhang_1234567890_0987654321--\r\n");
} else { // send message with inline text
content
+= "Content-type: text/plain; charset=UTF-8\r\n"
+ "Content-transfer-encoding: 8bit\r\n\r\n"
+ body
+ "\n-- " /* footer delimiter line !!! do not delete !
this notation will cut the following part from plain-text-reply !*/
+ "\n" + footer + appDetails
+ "\n ________________________________________________"
+ "\n http://reminderfox.mozdev.org/\n";
}
if ( !rmFxMsg.messenger()) {
content = rmFxUtil.encodeUTF8(content);
}
// ------ write TMP file ---------------
return rmFxUtil.makeMsgFile8 (content, rmFxUtil.buildUIDFile(refID));
}
rmFxMsg.setPriorityString = function (priority) {
// =========================================================================
var cPriority = "";
switch (priority) {
case "1": cPriority = "X-Priority: 1 (Highest)"; break;
case "2": cPriority = "X-Priority: 2 (High)"; break;
case "3": cPriority = "X-Priority: 3 (Normal)"; break;
case "4": cPriority = "X-Priority: 4 (Low)"; break;
case "5": cPriority = "X-Priority: 5 (Lowest)"; break;
default: cPriority = "X-Priority: 3 (Normal)"; break;
}
return cPriority;
}
/////////////////// 'SendFILE' for "NON" messenger ///////////////////////////
/**
* use a specific 'commandLine' Handler ... this is the NON 'messenger' part
*/
rmFxMsg.sendwUID = function (reminderID, msgString) {
// =========================================================================
var mailApp = rmFx_MessengerApp();
if ((mailApp == null) || (mailApp == "")) {
rmFxUtil.PromptAlert("Messenger not found!"); // reminderFox_getBundle().getString("rf.schedule. $$$string "));
return;
}
var osInfo = rmFx_opSystemInfo();
var args = new Array();
args [0] = "-reminderFox";
args [1] = "UID:"+ (reminderID);
args [2] = "-msgString";
if(osInfo.indexOf("Darwin") != -1) {
args [3] = Components.classes["@mozilla.org/file/directory_service;1"]
.getService(Components.interfaces.nsIProperties)
.get("TmpD", Components.interfaces.nsIFile);
} else {
args [3] = Components.classes["@mozilla.org/file/directory_service;1"]
.getService(Components.interfaces.nsIProperties)
.get("Progs", Components.interfaces.nsIFile).path.substring(3);
}
var cDate = new Date();
var msgLog = " ** Send with ** UID:" + reminderID + " at: " + cDate;
rmFxCore.statusSet(msgLog);
try {
go4Process.init(mailApp);
} catch (ex) {}
go4Process.run(false, args, args.length);
return; // scheduled TB with UID:reminderID -msgString mailFile.path
}
/**
* called from 'commandLine' Handler ... this is the 'messenger' part
*/
rmFxMsg.sendwUIDgo = function () {
// ========================================================================
if (!(rmFx_cmdID.indexOf('UID:') > -1)) { // check transfered code and validity
return; // not valid!! Terminate
}
window.close();
var icsFile = rmFxUtil.buildUIDFile(rmFx_cmdID.substring(4))
// rmFxUtil.dump2Console ("gWTEST: sendwUIDgo icsFile >>" + icsFile + "<<"); //gWTEST Darwin sendwUIDgo
var icsData = rmFxUtil.readInFileContents(icsFile)
.replace(/(\r\n)/g,"\n");
if (icsData.indexOf (rmFx_cmdID+"\n") == -1) {
var msgError = "*** Transfered ICS data has error: -1 ***"
+ "\n data >>" + rmFx_cmdID + "<<";
rmFxUtil.dump2Console (msgError);
return; // not valid!! Terminate
}
/* ----- check if file valid ----- +++2Todo +++2Todo +++2Todo +++2Todo
var osInfo = rmFx_opSystemInfo(); <<-- with Darwin fails !!
if(osInfo.indexOf("Darwin") == -1) {
if (rmFx_cmdString != Components.classes["@mozilla.org/file/directory_service;1"]
.getService(Components.interfaces.nsIProperties)
.get("Progs", Components.interfaces.nsIFile).path.substring(3)) {
var msgError = "*** Transfered ICS data has error: -2 ***";
rmFxUtil.dump2Console (msgError);
return; // not valid!! Terminate
}
} else {
if (rmFx_cmdString != Components.classes["@mozilla.org/file/directory_service;1"]
.getService(Components.interfaces.nsIProperties)
.get("TmpD", Components.interfaces.nsIFile).path.substring(3)) {
var msgError = "*** Transfered ICS data has error: -2 (Darwin) ***";
rmFxUtil.dump2Console (msgError);
return; // not valid!! Terminate
}
}
-------------- */
var msgString = rmFx_cmdString.split(";\n;");
// retrieve msg infos from 'ics file'
var msgLines = icsData.split("\n");
var toAddresses = msgLines[1].substring(4);
var subject = msgLines[2].substring(9);
var fromAddress = msgLines[3].substring(6);
var priority = msgLines[5].substring(12,13);
rmFxUtil.makeMsgFile (msgLines.join("\n"), icsFile);
var mailFile = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile);
mailFile.initWithPath(icsFile);
rmFxMsg.FileSend(
subject,
fromAddress,
toAddresses,
priority,
mailFile);
}
//////////////////// 'COMPOSE' for NON 'messenger' ///////////////////////////
/**
* use a specific 'commandLine' Handler ... this is the NON 'messenger' part
*
*/
rmFxMsg.composeMSG = function (reminderID, msgString) {
// =========================================================================
var mailApp = rmFx_MessengerApp();
if ((mailApp == null) || (mailApp == "")) {
rmFxUtil.PromptAlert("Messenger not found!"); // reminderFox_getBundle().getString("rf.schedule. $$$string "));
return;
}
var args = new Array();
args [0] = "-reminderFox";
args [1] = "COMPOSE:"+ (reminderID);
args [2] = "-msgString";
args [3] = msgString;
try {
go4Process.init(mailApp);
} catch (ex) {}
go4Process.run(false, args, args.length);
return; // FX schedules TB with COMPOSE:reminderID -msgString msgString
}
/**
* called from 'commandLine' Handler ... this is the 'messenger' part
*/
rmFxMsg.composeMSGgo = function () {
// =========================================================================
if (!(rmFx_cmdID.indexOf('COMPOSE:') > -1)) { // check transfered code and validity
return; // not valid!! Terminate
}
window.close();
// retrieve msg infos from passed window parameters
var msgString = unescape(rmFx_cmdString).split(";\n;");
var subject = msgString[0].substring(8);
var fromAddress = msgString[1].substring(5);
var toAddresses = msgString[2].substring(3);
var body = msgString[3].substring(5);
var footer = msgString[4].substring(7);
var priority = msgString[5].substring(9);
var refID = msgString[6].substring(6);
// rmFxUtil.dump2Console("gWTEST: composeMSGgo icsFile string >>" + msgString[7] + "<<"); //gWTEST Darwin
if (msgString[7] != null) {
var icsFile = msgString[7].substring(9);
var mailFile = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile);
mailFile.initWithPath(icsFile);
} else {
mailFile = null;
}
// var toAddresses = "";
var methodTyp = "PUBLISH";
rmFxMsg.Compose (subject, fromAddress, toAddresses,
priority, body, footer, refID, mailFile, methodTyp);
}
//////////////////// utilities 'messenger' /////////////////////////////////////
rmFxMsg.messenger = function () {
// =========================================================================
return (Components.classes["@mozilla.org/messenger/account-manager;1"] != null);
}
rmFxMsg.getAccountMngr = function () {
// =========================================================================
return Components.classes["@mozilla.org/messenger/account-manager;1"]
.getService().QueryInterface(Components.interfaces.nsIMsgAccountManager);
}
rmFxMsg.encodeMimeHeader = function (header) {
// =========================================================================
// http://www.xulplanet.com/references/xpcomref/ifaces/nsIMimeConverter.html
var mimeConverter = Components.classes["@mozilla.org/messenger/mimeconverter;1"]
.createInstance(Components.interfaces.nsIMimeConverter);
return mimeConverter.encodeMimePartIIStr(rmFxUtil.encodeUTF8(header), false,
"UTF-8", header.indexOf(":") + 2, 72);
}
/**
* 'messenger' use mail.accountmanager.accounts and identities
* NON 'messenger' prefs = extensions.reminderFox.mail.sender
*/
rmFxMsg.myMailIDs = function () {
// =========================================================================
if (rmFxMsg.messenger()) // OK: if we are in 'mail' system (TB, SM)
{ // this is tree pass process to eliminate identities for 'nntp'
// sounds complicate ... but didn't found a straight forward process
var as = Components.classes["@mozilla.org/messenger/account-manager;1"]
.getService(Components.interfaces.nsIMsgAccountManager).allServers;
var servers="";
for (var i = 0; i < as.Count(); ++i) {
var nextTyp = as.GetElementAt(i)
.QueryInterface(Components.interfaces.nsIMsgIncomingServer).type;
if (nextTyp != "nntp") {
var nextKey = as.GetElementAt(i)
.QueryInterface(Components.interfaces.nsIMsgIncomingServer).key;
servers += nextKey +",";
}
}
var _prefs = Components.classes["@mozilla.org/preferences-service;1"].
getService(Components.interfaces.nsIPrefBranch);
var accounts = _prefs.getCharPref("mail.accountmanager.accounts");
var idstr="";
if (accounts) {
var accountsArray = accounts.split(",");
for (var x = 0; x < accountsArray.length; x++) {
var temp1 = _prefs.getCharPref("mail.account." + accountsArray[x] + ".server");
if (servers.indexOf(temp1)> -1) {
try { idstr += _prefs.getCharPref("mail.account." + accountsArray[x]
+ ".identities") +",";}
catch (ex) {}
}
}
}
var ids = Components.classes["@mozilla.org/messenger/account-manager;1"].
getService(Components.interfaces.nsIMsgAccountManager).allIdentities;
var mailIds = "";
for (var i = 0; i < ids.Count(); ++i) {
var nextId = ids.GetElementAt(i).
QueryInterface (Components.interfaces.nsIMsgIdentity);
if (idstr.indexOf(nextId.key)> -1) {
try { mailIds += nextId.identityName + ",";}
catch (ex) {}
}
}
// delete last comma
mailIds = mailIds.substring(0,mailIds.length-1);
} else { // 'NON messenger' .. eg.FX etc ...
try {
var mailIds = reminderFox_prefsBranch.getCharPref(REMINDER_FOX_MAIL_SENDER);
} catch (ex) {}
}
return mailIds;
}
/**
* checks all non-nntp servers for valid 'fromAddress'
* returns the 'identity'
* If not matching
* -- not valid mailName --> take first valid identity for that server
* -- at all, take 'defaultAccount.defaultIdentity'
*
* in NON 'messenger' just return the 'fromAddress'
*/
rmFxMsg.getIdentity = function (fromAddress) {
// =========================================================================
var ids = Components.classes["@mozilla.org/messenger/account-manager;1"].
getService(Components.interfaces.nsIMsgAccountManager).allIdentities;
if ((fromAddress != null ) && (fromAddress != "" )) {
var returnId = null;
var xMailAdr ="x";
var xId = -1;
for (var i = 0; i < ids.Count(); ++i) {
var nextId = ids.GetElementAt(i).
QueryInterface (Components.interfaces.nsIMsgIdentity);
if ((fromAddress.indexOf(nextId.email) > -1) && (xMailAdr != nextId.email)){
xMailAdr =nextId.email;
xId = i;
}
if (nextId.identityName == fromAddress) {return nextId;}
}
}
// return ids.GetElementAt(xId).
// QueryInterface (Components.interfaces.nsIMsgIdentity);
// not found at all, return default
return rmFxMsg.getAccountMngr().defaultAccount.defaultIdentity;
}
/**
* Checks for the messenger version (TB1, TB2, TB3, SM, PB)
* and sets the global parameter 'gRmFx_Messenger'
*
* @note this function has to be stored in mail.js for 'remote'
* access of 'compose', search with 'UID' and 'msgID'
*
* @return gRmFx_Messenger
*/
rmFxMsg.whichMessenger = function () {
// =========================================================================
var REMINDERFOX_SEAMONKEY_ID = "{92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}";
var REMINDERFOX_THUNDERBIRD_ID = "{3550f703-e582-4d05-9a08-453d09bdfdc6}";
var REMINDERFOX_POSTBOX_ID = "postbox@postbox-inc.com";
if (gRmFx_Messenger != null) return gRmFx_Messenger;
var id;
if("@mozilla.org/xre/app-info;1" in Components.classes) {
// running under Mozilla 1.8 or later
id = Components.classes["@mozilla.org/xre/app-info;1"]
.getService(Components.interfaces.nsIXULAppInfo).ID;
} else {
try {
id = Components.classes["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefBranch)
.getCharPref("app.id");
} catch(e) {}
}
/* ----------------------
Thunderbird 2.x: $[0] = [string] "Thunderbird/2.0.0.22"
Shredder: $[0] = [string] "Shredder/3.0b3pre"
Postbox: $[0] = [string] "Thunderbird/1.0b13"
----- */
var idName="";
var _prefs = Components.classes["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefBranch);
switch (id) {
case (REMINDERFOX_POSTBOX_ID) : idName = "PB"; break;
case (REMINDERFOX_SEAMONKEY_ID) : {
var tbVersion = _prefs.getCharPref("general.useragent.extra.seamonkey");
if (tbVersion.search("SeaMonkey/1.") > -1) idName = "SM1";
if (tbVersion.search("SeaMonkey/2.") > -1) idName = "SM2";
break;
}
case (REMINDERFOX_THUNDERBIRD_ID) : {
var tbVersion = _prefs.getCharPref("general.useragent.extra.thunderbird");
if (tbVersion.search("Thunderbird/1.") > -1) idName = "TB1";
if (tbVersion.search("Thunderbird/2.") > -1) idName = "TB2";
if (tbVersion.search("Thunderbird/3.") > -1) idName = "TB3";
if (tbVersion.search("Shredder/3.") > -1) idName = "SH3";
break;
}
}
gRmFx_AB3 = (idName == "TB3") || (idName == "SM2"); // || (msgnrType == "PB"));
gRmFx_Messenger = idName;
return idName;
}